package com.gorkr.labuladong.data_struct.linked_list;

import org.junit.jupiter.api.Test;

import java.util.LinkedList;
import java.util.List;

/**
 * @author gorkr
 * @date 2022/09/13 11:29
 **/
public class M82RemoveDuplicatesFromSortedListII {

    class ListNode {

        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }

//    public ListNode deleteDuplicates(ListNode head) {
//        ListNode res, pre, now, next;
//
//        pre = new ListNode(-1, head);
//        res = pre;
//        now = head;
//        while (now != null) {
//            next = now.next;
//            if(next==null){
//                pre.next=now;
//                return res.next;
//            }
//            if (now.val == next.val) {
//                while (next != null && now.val == next.val) {
//                    now = next;
//                    next = now.next;
//                }
//                now=now.next;
//            } else {
//                pre.next = now;
//                pre = now;
//                now=now.next;
//            }
//        }
//        pre.next=null;
//
//        return res.next;
//    }

//
//    public ListNode deleteDuplicates2(ListNode head){
//        ListNode dummy = new ListNode(-1, head);
//        ListNode res = dummy;
//        ListNode now = head;
//        while (now!=null && now.next!=null){
//
//            if(now.val==now.next.val){
//                while (now.next != null &&now.val==now.next.val){
//                    now=now.next;
//                }
//            }else {
//                dummy.next=now;
//                dummy=dummy.next;
//                now= now.next;
//            }
//            dummy.next=null;
//            return res.next;
//        }
//    }

    public ListNode deleteDuplicates(ListNode head) {
        if(head == null) {
            return null;
        }
        ListNode dummyHead = new ListNode(-101);
        ListNode pre = dummyHead;
        pre.next = head;
        ListNode cur = head;
        while(cur != null && cur.next != null){
            if(cur.val == cur.next.val){
                int val = cur.val;
                while(cur != null && cur.val == val){
                    cur = cur.next;
                }
                pre.next = cur;
            }else{
                pre = cur;
                cur = cur.next;
            }
        }
        return dummyHead.next;
    }

    @Test
    public void test(){
        ListNode listNode = new ListNode(1);
        listNode.next = new ListNode(2);
        listNode.next.next= new ListNode(3);
        listNode.next.next.next = new ListNode(3);
        listNode.next.next.next.next = new ListNode(4);
        System.out.println(deleteDuplicates(listNode));


    }


}
    